Aurora Serverlessについての整理
Amazon Auroraとは?
Amazon Auroraは MySQL及びPostgreSQLと互換性のあるクラウド向けのリレーショナルデータベースです。
まずAuroraを話す前にAmazon RDSについて少し話します。Amazon RDSはクラウドの上でリレーショナルデータベースを使えるサービスです。
フルマネージドサービスでバックアップ、ソフトウェアパッチ、自動的な障害検出、および復旧を管理します。そしてDBインスタンスのCPU、メモリ、IOPSやストレジを個別に設定できまし、マルチAZやフェイルオーバなど高可用性のリレーショナルデータベースサービスです。
Amazon AuroraはAmazon RDSが提供しているデーターベースエンジンの一つで、MySQL最大5倍・PostgreSQL最大3倍のパフォーマンスを提供できます。
AuroraはRDSとは違うアーキテクチャを持っています。
他のRDSとAuroraの一番大きい違いはストレージです。RDSは一つのDBインスタンスに一つのインスタンスとEBSが連結されていますが、Auroraは分散ストレージです。全てのデータは最小3つのAZ、AZあたり2つのデータコピー本にある沢山のストレージノードに保存されます。そのおかげで迅速なファイルオーバ高い可用性の実装ができます。
ではこのようにものすごいAmazon RDS(Aurora含み)を使ったらいいって思われるかもしれませんが、トラフィックよったDBインスタンスの容量・拡張管理やLambdaとのコネクション管理などRDSにも短所も存在します。
Amazon Aurora Serverless
Aurora Serverlessはインスタンスの管理が要らないので予想不可能なトラフィックやテストを行う時に有用に使えます。Aurora ServerlessはV1とV2のバージョンがありますが、V2はまだ定式リリーズではないのでV1を基準で話します。
Aurora Serverlessの特徴
Aurora Serverlessの特徴を簡略にみてみます。
- 使用したリソースは1秒単位で課金(最小1分)
- Single AZ(ファイルオーバはMulti AZ可能)
- 10gb ~ 128Tbまで自動的に拡張
- ACU(Aurora Capacity Unit)単位でコンピューティング調節
- 基本的に暗号化はされている(無効化不可能)
Auroraのサーバレスバージョンだと思ってもいいんですが、Aurora ServerlessとAuroraはアーキテクチャから違います。
Aurora Serverlessのアーキテクチャ
Aurora Serverlessのアーキテクチャです。アプリケーションとAurora ServerlessはVPCエンドポイントで通信します。Request Router
はアプリケーションとAuroraインスタンスをつながる役割を担当します。Auroraインスタンスは新しいインスタンスが追加されたりなくなったりするのでRouterがこのようなAuroraとアプリケーションの連結を対応できるようにします。
Scalable DB Capacity
とStorage Volume
はDB処理を担当します。DBレイアーではDB演算作業を、Storage Volumeはデータ保存を担当します。Aurora ServerlessはプロビジョニングされたサーバがないのでDB作業のためのコンピューティングはACU
ということを使います。そしてこのACUはデータを保存しないので別ストレージレイヤーが必要になるのです。
1ACUは約2gbのRAMとそれに相応するCPUとネットワークを意味します。最大/最小ACUが設定できますし0ACUから256ACUまでスケール変換ができます。そして時間内のDB使用を確認してACUの数を自動的に調節して費用の最適化ができます(5分〜24時間設定可能)。DBの使用が全然ない場合、つまりACUが0になるとAurora Serverlessはストレージの費用だけ課金されます。DBインスタンスを完全中止しなければ課金され続けるAuroraとは違います。(0ACUから1ACUになるまで25秒の待機時間があるので注意)
Warm pool of Instance
はDB作業に必要なACUを渡したり使わないACUを回収したりします。
Data API
Aurora Serverlessは「Serverless」にという名前とふさわしくAPIを使って他のサーバレスサービスとの連携ができます。サーバレスアーキテクチャでDBを使うためにRDBMSを諦めてNoSQLのDynamoDBを使ったり、RDBMSを使いたいがAmazon RDSとLambdaのコネクションのオーバヘッド問題があるのでRDS Proxy使ったりするなど他の手間がかかる方法をしなければいけないでした。しかしAurora ServerlessがでRDBMS(Aurora)も順調に使えることになりました。
Data APIを使ってコネクションを管理せずにエンドポイントを通じてクエリを実行できます。JSON形式で返され全てのトラフィックはHTTPSを使いますがLmabdaのようなAWSサービスと使いたい場合はVPCエンドポイントを利用することもできます。Data API呼び出しは同期的に行われます。基本的に45秒以内に処理が完了できなかったら呼び出しが終わりますが、パラメタ(continueAfterTimeout)を使って呼び出し時間が過ぎてもSQLを実行できます。
使用注意点
Aurora Serverlessを使うためには注意することです。
- Aurora ServerlessはシングルAZです。
- 障害対策はMulti-AZ Failoverで、DBに障害が発生した時に自動的に他のAZに復旧されます。しかしプロビジョニングされたAuroraより時間がかかります。
- ストレージはコンピューティングと別にマルチAZで分離させているので障害が発生してもストレージ利用できます。
- 使用可能バージョンは3つです。
- Aurora MySQL 5.6.10a / 5.7 2.07.1 2つ 必ず3306ポート
- Aurora PostgreSQL 10.14 1つ 必ず5432ポート
- バックアップの制約事項
- DBクラスターの基本バックアップ期間は設定できません。
- DBクラスターのスナップショットをS3バケットにアクスポートできません。
- VPCの外部からアクセスできません。
- パブリックIPの付与ができませんのでVPCの中しか接続できないです。
- Data APIまたはBastion Hostで接続できます。
- 同じAZで複数のサーブネットを持つことはできません。
- 提供してない機能
- Aurora グローバルデータベース
- Aurora マルチマスタークラスター
- Aurora レプリカ
- AWS Identity and Access Management (IAM) データベース認証
- Aurora でのバックトラック
- データベースアクティビティストリーム
- Performance Insights
最後に
Aurora Serverlessについて整理してみました。AuroraとAurora Serverlessは両方とも長短がありますし、価格的な面もDBインスタンスのタイプや使う期間など自分の環境のよって違いますので必ずAurora Serverlessの方が安いことでもないです。 AuroraとAurora Serverlessの中でどちらを使うのかよく判断してから選んだ方がいいと思います。